package dfbz.属性流;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;

/*
* /*
 * java.util.Properties extends hashtable
 *   Properties类表示一组持久的属性，双列集合
 *   Properties可以保存到流中或从流中加载
 *   属性列表中的key和value都固定是字符串，泛型可以不用写
 *       提示：遍历集合只会拿到字符串的key
 * Properties集合是唯一一个和IO流结合的集合
 *   可以将集合中的数据存在文件中
 *       store(OutputStream out, String comments) 将此属性列表（键和元素对）写入此 Properties表中，以适合于使用 load(InputStream)方法加载到 Properties表中的格式输出流。
 *       store(Writer writer, String comments) 将此属性列表（键和元素对）写入此 Properties表中，以适合使用 load(Reader)方法的格式输出到输出字符流。
 *       参数：
 *          OutputStream  不能写中文
 *          Writer  可以写中文
 *          comments  注释。一般传入空字符串。用来说明你写的是什么内容
 *   也可以把文件中的数据封装到这个集合中
 *      void load(InputStream inStream) 从输入字节流读取属性列表（键和元素对）。
 *      void load(Reader reader) 以简单的线性格式从输入字符流读取属性列表（关键字和元素对）。
 *      参数：
 *          InputStream  不能读中文
 *          Reader  可以读中文
 *
 * 构造方法：
 *   Properties() 创建一个没有默认值的空属性列表。
 *
 * 成员方法：
 *   String getProperty(String key) 使用此属性列表中指定的键搜索属性。
 *   Object setProperty(String key, String value) 致电 Hashtable方法 put 。
 *   Set<String> stringPropertyNames() 返回此属性列表中的一组键，其中键及其对应的值为字符串，包括默认属性列表中的不同键，如果尚未从主属性列表中找到相同名称的键。
 *
 *
 * 注意事项：
 *  1、存储的文件中的键值对的连接符，可以是 = 空格 :
 *  2、存储的文件中的键值对可以使用#注释，被注释的键值对不会读取
 *
 * 总结：
 *  1、创建properties对象
 *  2、使用load()传入字符输入流加载文件进内存
 *  3、使用store()传入字符输出流将集合中的数据写在文件中
 *  4、遍历集合
 *  5、关闭流
 * */
public class demo01 {
    public static void main(String[] args) throws IOException {
        demo();
    }

    private static void demo() throws IOException {
        Properties properties = new Properties();
        properties.setProperty("IU","黄晓");
        properties.setProperty("林允儿","莫志鹏");
        properties.setProperty("lisa","狗哥");
        FileWriter fileWriter=new FileWriter("E:\\东方标准\\JAVASE阶段\\JAVASE-CODE\\Day18\\g.txt");
        FileReader fileReader=new FileReader("E:\\东方标准\\JAVASE阶段\\JAVASE-CODE\\Day18\\g.txt");
        properties.store(fileWriter,"set in file");
        properties.load(fileReader);
        Set<String> strings = properties.stringPropertyNames();
        for (String string : strings) {
            System.out.println(string+"----"+properties.getProperty(string));
        }
        fileReader.close();
    }
}
